package role

import (
	"context"
	model "service/model/hr"
	mCache "service/model/hr_cache"
	"service/model/mod"

	gpb "gitee.com/cloudapex/protos/hr/pb"
	gpa "gitee.com/cloudapex/protos/hr_cache/pb"

	"gitee.com/cloudapex/ulern/htp"
	"gitee.com/cloudapex/ulern/util"
	"github.com/gin-gonic/gin"
)

/*
 * 描述: 获取角色列表
 * 路由: role/roleList
 * 方法: GET
 *********************************************************************/
type RoleList struct {
}

func (this *RoleList) Handle(c *gin.Context, ctx context.Context) htp.Response {
	jwtUser := mod.CurrUser(c)

	rsp, err := model.Roles.GetRoleList(ctx, &gpb.RolesBaseReq{
		CId: jwtUser.CId,
	})
	if err != nil {
		return htp.RespModelErr("", err)
	}
	return htp.RespOK("", rsp)
}

/*
 * 描述: 添加角色列表
 * 路由: role/addRole
 * 方法: POST
 *********************************************************************/
type AddRole struct {
	CId  int64  `form:"cId" json:"cId"`                              //公司ID
	Name string `form:"roleName" json:"roleName" binding:"required"` //角色名称
}

func (this *AddRole) Handle(c *gin.Context, ctx context.Context) htp.Response {
	jwtUser := mod.CurrUser(c)

	var cid int64
	if jwtUser.CId == 0 {
		cid = this.CId
	} else {
		cid = jwtUser.CId
	}
	rsp, err := model.Roles.AddRole(ctx, &gpb.RolesBaseReq{
		CId:  cid,
		Name: this.Name,
	})
	if err != nil {
		return htp.RespModelErr("", err)
	}
	if _, err := mCache.RolesCache.AddRole(ctx, &gpa.RolesBaseCacheReq{Id: rsp.Id, CId: this.CId, Name: this.Name}); err != nil {
		util.Error(err.Error())
	}
	return htp.RespOK("", &struct {
		RoleId int64 `json:"roleId"`
	}{rsp.Id})
}

/*
 * 描述: 添加角色列表
 * 路由: role/addRole
 * 方法: POST
 *********************************************************************/
type DelRole struct {
	Id int64 `form:"roleId" json:"roleId" binding:"required"` //角色ID
}

func (this *DelRole) Handle(c *gin.Context, ctx context.Context) htp.Response {
	rsp, err := model.Roles.DelRole(ctx, &gpb.RolesBaseReq{
		Id: this.Id,
	})
	if err != nil {
		return htp.RespModelErr("", err)
	}
	return htp.RespOK("", rsp)
}

/*
 * 描述: 获取单个角色信息
 * 路由: role/getRole
 * 方法: POST
 *********************************************************************/
type GetRole DelRole

func (this *GetRole) Handle(c *gin.Context, ctx context.Context) htp.Response {
	rsp, err := model.Roles.GetRole(ctx, &gpb.RolesBaseReq{
		Id: this.Id,
	})
	if err != nil {
		return htp.RespModelErr("", err)
	}
	return htp.RespOK("", rsp)
}
